Bingo, Computer Graphics & Game Developer
模板为C++提供了泛型的概念
1.在编译初期 编译器并不会给template<typename T> fun
分配内存空间 只有在发现程序显式的实例化了这个模板的时候 才会分配响应的内存出来
2.模板也会有不足的时候
比如在对比大小的min()当中
template<typename T>
T& min(const T& a, const T& b)
{
return (a<b) ? a : b;
}
当中 会出现一定情况的不适用 比如用户想要使用char*
来对比每一位大小时 编译器发现char*
并没有重载过 > 或者 <运算符 那么就会出现编译无法通过的错误
template<> //告诉了编译器 这是一个模板的特化
const char* min<char *>(const char* const& a, const char* const& b)
{
return (strcmp(a, b) < 0) ? a : b;
}
定义完之后 min就可以额外的支持基本数字类型之外的char*型了
const char* s1=“say”, s2 = "hello";
min(s1, s1) << endl; //此时用户在程序外部调用
就可以正常的通过编译
因此模板的特化就是模板本身泛型能力不够的一种补充